package CapaLogica;

import CapaAccesoBD.Conector;
import java.util.ArrayList;

public class MultiArtista{
    
    /**
    * Inserta un registro del artista a la base de datos
    *
    * @param  pid  identificador del artista
    * @param  pnombreCompleto nombre del artista
    * @param  palias nombre del artista
    * @param  pnacionalidad nombre del artista
    * @param  pciudad nombre del artista
    * @param  pfec_naci nombre del artista
    * @param  pfec_fall nombre del artista
    * @param  pindTipo nombre del artista
    * @param  pidMaestro nombre del artista
    * @param  nomEscu nombre del artista
    * @return   el objeto artista
    */
	public  Artista crear(int pid,String pnombreCompleto,String palias,String pnacionalidad,String pciudad
                ,String pfec_naci, String pfec_fall, String pindTipo, int pidMaestro,
                String nomEscu) 
		throws Exception{
            
		Artista partista=null;
		String sql;
		sql = "INSERT INTO TArtista "+
		"VALUES ("+pid+", '"+pnombreCompleto+"', '"+palias+"', '"+pnacionalidad+"', '"+pciudad+"', '"+pfec_naci+"'"
                        + ", '"+pfec_fall+"', '"+pindTipo+"', '"+pidMaestro+"', '"+nomEscu+"');";
		try {
			Conector.getConector().ejecutarSQL(sql);
			partista = new Artista (pid, pnombreCompleto,palias,pnacionalidad,pciudad,pfec_naci,pfec_fall,pindTipo,pidMaestro,nomEscu);
		}
		catch (Exception e) {
			throw new Exception ("Ocurrio un error a la hora de registrar.");
		}
		return partista;
	}
        
   /**
    * Actualiza el objeto artista en la base de datos
    *
    * @param  partista  objecto artista

    * @return   el objeto artista
    */

    public  void actualizar(Artista partista) throws 
			java.sql.SQLException,Exception{
		String sql;
		sql = "UPDATE TArtista "+
		"SET nombreCompleto='"+partista.getNombreCompleto()+"' "+
                ",alias='"+partista.getAlias()+"' "+
                ",nacionalidad='"+partista.getNacionalidad()+"' "+
                ",ciudad='"+partista.getCiudad()+"' "+
                ",fechaNacimiento='"+partista.getFechaNacimiento()+"' "+
                ",fechaFallecimiento='"+partista.getFechaFallecimiento()+"' "+
                ",indTipoPintor='"+partista.getIndTipoPintor()+"' "+
                ",id_maestro="+partista.getIdMaestro()+" "+
                ",nom_escuela='"+partista.getNomEscuela()+"' "+
		"WHERE id="+partista.getId()+";";
		try {
			Conector.getConector().ejecutarSQL(sql);
		}
		catch (Exception e) {
			throw new Exception ("El artista no ha sido registrado");
		}
	}
   /**
    * Elimina el objeto artista en la base de datos
    *
    * @param  partista  objecto artista

    */	
	public boolean borrar(Artista partista) throws 
                        java.sql.SQLException,Exception{
            
                boolean result=false;        
		String sql;
		sql = "DELETE FROM TArtista "+
		"WHERE id="+partista.getId()+";";
		try {
			Conector.getConector().ejecutarSQL(sql);
                        result=true;
		}
		catch (Exception e) {
			throw new Exception ("Ocurrio un error al eliminar el artista.");
		}
                
                return result;
	}

   /**
    * Busca coincidencias con ese nombre de artista
    *
    * @param  pnomArtista  nombre artista

    * @return   ArrayList<Artista>
    */        
        public ArrayList<Artista> buscarPorNombre(String pnomArtista) throws Exception{
            Artista objArtista;
            ArrayList<Artista> listaArtistas;
            String sql;
            java.sql.ResultSet rs;
            sql = "SELECT id, nombreCompleto, alias, nacionalidad, ciudad, fechaNacimiento, "
                  + "fechaFallecimiento,indTipoPintor, id_maestro, nom_escuela " + 
                  "FROM TArtista " + 
                  "WHERE nombreCompleto like '%"+pnomArtista+"%';";
            try{
                rs = Conector.getConector().ejecutarSQL(sql,true);
                listaArtistas = new ArrayList<>();
                if (rs.next()) {
                    do{
                        objArtista = new Artista (rs.getInt("id"),rs.getString("nombreCompleto"), rs.getString("alias"), rs.getString("nacionalidad"),
                                rs.getString("ciudad"), rs.getString("fechaNacimiento"), rs.getString("fechaFallecimiento"), rs.getString("indTipoPintor"),rs.getInt("id_maestro"),rs.getString("nom_escuela"));
                        listaArtistas.add(objArtista);
                    }while (rs.next());
                }
            }catch (Exception e){
                throw new Exception ("No hay artistas con ese nombre.");
            }
            rs.close();
            
            return listaArtistas;
        }  

   /**
    * Busca coincidencias de artista por escuela
    *
    * @param  pnomEscuela  nombre de escuela

    * @return   ArrayList<Artista>
    */      
        public ArrayList<Artista> buscarPorEscuela(String pnomEscuela) throws Exception{
            Artista objArtista;
            ArrayList<Artista> listaArtistas;
            String sql;
            java.sql.ResultSet rs;
            sql = "SELECT id, nombreCompleto, alias, nacionalidad, ciudad, fechaNacimiento, "
                  + "fechaFallecimiento,indTipoPintor, id_maestro, nom_escuela " + 
                  "FROM TArtista " + 
                  "WHERE nom_escuela like '%"+pnomEscuela+"%';";
            try{
                rs = Conector.getConector().ejecutarSQL(sql,true);
                listaArtistas = new ArrayList<>();
                if (rs.next()) {
                    do{
                        objArtista = new Artista (rs.getInt("id"),rs.getString("nombreCompleto"), rs.getString("alias"), rs.getString("nacionalidad"),
                                rs.getString("ciudad"), rs.getString("fechaNacimiento"), rs.getString("fechaFallecimiento"), rs.getString("indTipoPintor"),rs.getInt("id_maestro"),rs.getString("nom_escuela"));
                        listaArtistas.add(objArtista);
                    }while (rs.next());
                }
            }catch (Exception e){
                throw new Exception ("No hay artistas asociados a esa escuela.");
            }
            rs.close();
            
            return listaArtistas;
        }       

      
   /**
    * Lista los artitas que no estan mecenados segun el id del
    * mecena
    *
    * @param  pidMecena  id mecena

    * @return   ArrayList<Artista>
    */      
     public ArrayList<Artista> listarArtistasDisponibles(int pidMecena) throws Exception{
            Artista objArtista;
            ArrayList<Artista> listaArtistas;
            String sql;
            java.sql.ResultSet rs;
            sql = "SELECT id, nombreCompleto, alias, nacionalidad, ciudad, fechaNacimiento, "
                  + "fechaFallecimiento,indTipoPintor, id_maestro, nom_escuela " + 
                  "FROM TArtista " + 
                  "WHERE id not in (select id_artista from TMecenazgo where id_mecena="+pidMecena+");";
            try{
                rs = Conector.getConector().ejecutarSQL(sql,true);
                listaArtistas = new ArrayList<>();
                if (rs.next()) {
                    do{
                        objArtista = new Artista (rs.getInt("id"),rs.getString("nombreCompleto"), rs.getString("alias"), rs.getString("nacionalidad"),
                                rs.getString("ciudad"), rs.getString("fechaNacimiento"), rs.getString("fechaFallecimiento"), rs.getString("indTipoPintor"),rs.getInt("id_maestro"),rs.getString("nom_escuela"));
                        listaArtistas.add(objArtista);
                    }while (rs.next());
                }
            }catch (Exception e){
                throw new Exception ("No hay artistas con ese nombre.");
            }
            rs.close();
            
            return listaArtistas;
        }  
   /**
    * Busca los artistas segun sea por id,nombre o ambos
    *
    * @param  pidArtista  id artista
    * @param  pnombre  nombre artista
    * @return   ArrayList<Artista>
    */   
       public ArrayList<Artista> buscarPorNombre_id(int pidArtista,String pnombre) throws Exception{
            Artista objArtista;
            ArrayList<Artista> listaArtistas;
            String sql;
            java.sql.ResultSet rs;
            sql = "SELECT id, nombreCompleto, alias, nacionalidad, ciudad, fechaNacimiento, "
                  + "fechaFallecimiento,indTipoPintor, id_maestro, nom_escuela " + 
                  "FROM TArtista ";
                  if(pidArtista>0 && pnombre.length()>0){
                     sql+=" where id ="+pidArtista+" and nombreCompleto like '%"+pnombre+"%';"; 
                  }else if(pidArtista>0){
                      sql+=" where id ="+pidArtista;
                  }else if(pnombre.length()>0){
                      sql+= " where nombreCompleto like '%"+pnombre+"%' ;";
                  }
                  sql+=";";
            try{
                rs = Conector.getConector().ejecutarSQL(sql,true);
                listaArtistas = new ArrayList<>();
                if (rs.next()) {
                    do{
                        objArtista = new Artista (rs.getInt("id"),rs.getString("nombreCompleto"), rs.getString("alias"), rs.getString("nacionalidad"),
                                rs.getString("ciudad"), rs.getString("fechaNacimiento"), rs.getString("fechaFallecimiento"), rs.getString("indTipoPintor"),rs.getInt("id_maestro"),rs.getString("nom_escuela"));
                        listaArtistas.add(objArtista);
                    }while (rs.next());
                }
            }catch (Exception e){
                throw new Exception ("No hay artistas con ese nombre.");
            }
            rs.close();
            
            return listaArtistas;
        } 
       
   /**
    * Busca un artista por id
    *
    * @param  pidArtista  id artista
    * @return   objeto artista
    */          
        public Artista buscarPorId(int pidArtista) throws Exception{
            Artista objArtista=null;
            String sql;
            java.sql.ResultSet rs;
            sql = "SELECT * "
                  +" FROM TArtista " + 
                  "WHERE id ="+pidArtista+";";
            try{

                rs = Conector.getConector().ejecutarSQL(sql,true);
                if(rs.next()){
                    objArtista = new Artista (rs.getInt("id"),rs.getString("nombreCompleto"), rs.getString("alias"), rs.getString("nacionalidad"), rs.getString("ciudad"), rs.getString("fechaNacimiento"),
                                  rs.getString("fechaFallecimiento"), rs.getString("indTipoPintor"),rs.getInt("id_maestro"),rs.getString("nom_escuela"));
                }

            }catch (Exception e){ 
                throw new Exception (e);
            }
            rs.close();
            
            return objArtista;
        }
        
}